ostree: Add --view mode to `ostree summary`
authorPhilip Withnall <withnall@endlessm.com>
Thu, 4 May 2017 10:31:50 +0000 (11:31 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 8 May 2017 00:55:24 +0000 (00:55 +0000)
This allows a locally generated summary file to be viewed. It accepts
the same arguments as `ostree remote summary` (i.e. --raw).

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #826
Approved by: cgwalters

src/ostree/ot-builtin-summary.c

index fa037400bf3d62a95a1414935abbefa4c80a38b1..9055d972ca298b88bd3ed57e475d841f70a2df51 100644 (file)
 
 #include "config.h"
 
+#include "ostree-repo-private.h"
+#include "ot-dump.h"
 #include "ot-main.h"
 #include "ot-builtins.h"
 #include "ostree.h"
 #include "otutil.h"
 
-static gboolean opt_update;
+static gboolean opt_update, opt_view, opt_raw;
 static char **opt_key_ids;
 static char *opt_gpg_homedir;
 
 static GOptionEntry options[] = {
   { "update", 'u', 0, G_OPTION_ARG_NONE, &opt_update, "Update the summary", NULL },
+  { "view", 'v', 0, G_OPTION_ARG_NONE, &opt_view, "View the local summary file", NULL },
+  { "raw", 0, 0, G_OPTION_ARG_NONE, &opt_raw, "View the raw bytes of the summary file", NULL },
   { "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_key_ids, "GPG Key ID to sign the summary with", "KEY-ID"},
   { "gpg-homedir", 0, 0, G_OPTION_ARG_FILENAME, &opt_gpg_homedir, "GPG Homedir to use when looking for keyrings", "HOMEDIR"},
   { NULL }
@@ -42,6 +46,7 @@ ostree_builtin_summary (int argc, char **argv, GCancellable *cancellable, GError
   gboolean ret = FALSE;
   g_autoptr(GOptionContext) context = NULL;
   glnx_unref_object OstreeRepo *repo = NULL;
+  OstreeDumpFlags flags = OSTREE_DUMP_NONE;
 
   context = g_option_context_new ("Manage summary metadata");
 
@@ -66,6 +71,19 @@ ostree_builtin_summary (int argc, char **argv, GCancellable *cancellable, GError
             goto out;
         }
     }
+  else if (opt_view)
+    {
+      g_autoptr(GBytes) summary_data = NULL;
+
+      if (opt_raw)
+        flags |= OSTREE_DUMP_RAW;
+
+      summary_data = ot_file_mapat_bytes (repo->repo_dir_fd, "summary", error);
+      if (!summary_data)
+        goto out;
+
+      ot_dump_summary_bytes (summary_data, flags);
+    }
   else
     {
       g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,